//package com.example.common.core.annotation;
//
//import jakarta.servlet.http.HttpServletRequest;
//import org.junit.Before;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cache.Cache;
//import org.springframework.stereotype.Component;
//import org.springframework.cache.CacheManager;
//import java.util.concurrent.TimeUnit;
//
//@Aspect
//@Component
//public class RateLimitAspect {
//
//    @Autowired
//    private HttpServletRequest request;
//
//    @Autowired
//    private CacheManager cacheManager;
//
//    @Before("@annotation(rateLimit)") // 拦截标注了 @RateLimit 的方法
//    public void checkRateLimit(JoinPoint joinPoint, RateLimit rateLimit) {
//        String userKey = getUserKey();
//        String cacheKey = rateLimit.key() + ":" + userKey + ":" + joinPoint.getSignature().toShortString();
//
//        Cache cache = cacheManager.getCache("rateLimitCache");  // 获取指定的缓存
//        if (cache == null) {
//            throw new RuntimeException("Cache not found!");
//        }
//
//        Integer requestCount = cache.get(cacheKey, Integer.class);
//
//        // 如果缓存中没有请求次数，说明是第一次请求，初始化请求次数
//        if (requestCount == null) {
//            cache.put(cacheKey, 1);
//            cache.put(cacheKey + ":expire", System.currentTimeMillis(), rateLimit.period(), TimeUnit.SECONDS);
//        } else {
//            if (requestCount >= rateLimit.count()) {
//                throw new RuntimeException("Request limit exceeded! Please try again later.");
//            }
//            cache.put(cacheKey, requestCount + 1);  // 增加请求次数
//        }
//    }
//
//    /**
//     * 获取用户唯一标识，假设这里是从 HTTP 请求中获取用户 ID，实际项目中可以根据需要更改获取方式
//     */
//    private String getUserKey() {
//        // 假设从 HTTP 请求头中获取用户的唯一标识，实际可以根据项目需求调整
//        return request.getHeader("User-Id");
//    }
//}
